package com.lxy.jsonTest.Test;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.lxy.jsonTest.pojo.Person;
import com.lxy.jsonTest.pojo.PersonListType;
import com.lxy.jsonTest.pojo.PersonMapType;
import org.junit.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JsonTest {
    //方式一、javaBean 、 json转换
    @Test
    public void test1(){
        Person use = new Person(1, "李心雨");
        Gson gson = new Gson(); //创建Gson对象实例
        String json = gson.toJson(use); //toJson可以JavaBean 直接转化为 Json字符串
        System.out.println(json); //{"id":1,"name":"李心雨"}
        Person person = gson.fromJson(json, Person.class);//参数：JSON字符串，具体类型【转为一个Person使用】
        System.out.println(person); //Person{id=1, name='李心雨'}
    }

    //方式二、List集合和json转换
    @Test
    public void test2(){
        List<Person> personList = new ArrayList<>();
        personList.add(new Person(1,"lxy"));
        personList.add(new Person(2,"lucy"));
        Gson gson = new Gson();
        String json = gson.toJson(personList);
        System.out.println(json); //[{"id":1,"name":"lxy"},{"id":2,"name":"lucy"}]

        List<Person> getList = gson.fromJson(json, new PersonListType().getType()); //存储的是Map类型，GogoJson给我们准备了getType方法
        System.out.println(getList.get(0).getId());
    }

    //方式三、Map集合和Json转换
    @Test
    public void test3(){
        Map<Integer,Person> pm = new HashMap<>();
        pm.put(1,new Person(1,"lxy"));
        pm.put(2,new Person(2,"lucy"));

        Gson gson = new Gson();
        String json = gson.toJson(pm);
        System.out.println(json);//把Map集合转化为Json字符串

        Map<Integer,Person> map = gson.fromJson(json, new PersonMapType().getType());
        Map<Integer,Person> map1 = gson.fromJson(json, new TypeToken<Map<Integer,Person>>() {}); //匿名内部类
        Person person = map1.get(1);
        System.out.println(person);
    }
}
